﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Cash.View.Administracao
{
    public partial class Pagina : BasePageCash
    {
        private System.Linq.IQueryable carregaPesquisa()
        {
            try
            {
                DateTime dtCadIni = Validacao.Date(txtDataCadastroInicio.Text) ? validaDataPesquisa(DateTime.Parse(txtDataCadastroInicio.Text)) : MinDataSql;
                DateTime dtCadFim = Validacao.Date(txtDataCadastroFim.Text) ? validaDataPesquisa(DateTime.Parse(txtDataCadastroFim.Text)) : MaxDataSql - horaCompl;

                dtCadIni = dtCadIni.ToString() == "" ? MinDataSql : dtCadIni;
                dtCadFim = dtCadFim.ToString() == "" ? MaxDataSql : dtCadFim + horaCompl;

                var query = from pag in cashEntity.PAGINA
                            join sta in cashEntity.STATUS on pag.ID_STATUS equals sta.ID_STATUS
                            join pai in cashEntity.PAGINA on pag.ID_PAGINA_PAI equals pai.ID_PAGINA
                            where pag.NOME.Contains(txtNome.Text) &&
                                    pag.DATA_CADASTRO >= dtCadIni &&
                                    pag.DATA_CADASTRO <= dtCadFim
                            orderby pag.NOME
                            select new
                            {
                                Id = pag.ID_PAGINA,
                                Nome = pag.NOME,
                                Url = pag.URL,
                                Pai = pai.NOME,
                                Status = pag.STATUS.DESCRICAO
                            };
                return query;
            }
            catch (Exception)
            {
                return null;
            }
        }

        private void carregaGrid()
        {
            grvPesquisa.Columns[1].Visible = true;
            grvPesquisa.DataSource = carregaPesquisa();
            grvPesquisa.DataBind();
            grvPesquisa.Columns[1].Visible = false;
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                String Acao = Request.QueryString["Acao"] != null ? Request.QueryString["Acao"].ToString() : "";
                if ("Pesq".Equals(Acao))
                {
                    btnPesquisar_Click(sender, e);
                }
            }
        }

        protected void btnPesquisar_Click(object sender, EventArgs e)
        {
            carregaGrid();
            if (grvPesquisa.Rows.Count == 0)
            {
                lblErro.Text = "A pesquisa não retornou nenhum registro.";
                lblErro.Visible = true;
                btnExportar.Visible = false;
            }
            else
            {
                lblErro.Visible = false;
                btnExportar.Visible = true;
            }

        }

        protected void btnExportar_Click(object sender, EventArgs e)
        {
            GridViewExportUtil.Export("Pesquisa.xls", this.grvPesquisa);
        }

        protected void grvPesquisa_RowDataBound(object sender, GridViewRowEventArgs e)
        {

            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                ImageButton delButton = (ImageButton)e.Row.Cells[0].Controls[2];
                delButton.OnClientClick = "var r=confirm('Deseja realmente excluir a página selecionada?');if(r==false){return;}";
            }
        }

        protected void grvPesquisa_RowEditing(object sender, GridViewEditEventArgs e)
        {
            grvPesquisa.EditIndex = e.NewEditIndex;
            int row = grvPesquisa.EditIndex;
            TableCell cell = grvPesquisa.Rows[row].Cells[1];
            int valor = Int32.Parse(cell.Text);
            Response.Redirect("~/View/Configuracao/CadastroPagina.aspx?id=" + valor);
        }

        protected void grvPesquisa_RowDeleting(Object sender, GridViewDeleteEventArgs e)
        {
            TableCell cell = grvPesquisa.Rows[e.RowIndex].Cells[1];
            int valor = Int32.Parse(cell.Text);
            PAGINA pagina = new PAGINA();
            pagina = cashEntity.PAGINA.Where(c => c.ID_PAGINA == valor).First();

            int count = (from per in cashEntity.PERFIL_PAGINA
                         where per.ID_PAGINA.Equals(pagina.ID_PAGINA)
                         select per).Count();

            if (count == 0)
            {
                pagina.ID_STATUS = 2;
                cashEntity.SaveChanges();
                gravaBitacora("Exclusao", "Excluiu Pagina -> " + pagina.ID_PAGINA + ";" + pagina.ID_PAGINA_PAI + ";" +
                                                pagina.NOME + ";" + pagina.DATA_CADASTRO + ";" + pagina.URL + ";" + pagina.ID_STATUS);
                lblErro.Text = "Página excluída com sucesso!";
                lblErro.Visible = true;

            }
            else
            {
                lblErro.Text = "Não é possível excluir uma pagina que tenha vínculo com funcionário!";
                lblErro.Visible = true;
            }

            carregaGrid();
        }

        protected void grvPesquisa_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            grvPesquisa.Columns[1].Visible = true;
            grvPesquisa.PageIndex = e.NewPageIndex;
            grvPesquisa.DataSource = carregaPesquisa();
            grvPesquisa.DataBind();
            grvPesquisa.Columns[1].Visible = false;
        }
    }
}